/*
 * ......................................&&.........................
 * ....................................&&&..........................
 * .................................&&&&............................
 * ...............................&&&&..............................
 * .............................&&&&&&..............................
 * ...........................&&&&&&....&&&..&&&&&&&&&&&&&&&........
 * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............
 * ................&...&&&&&&&&&&&&&&&&&&&&&&&&&&&&.................
 * .......................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........
 * ...................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...............
 * ..................&&&   &&&&&&&&&&&&&&&&&&&&&&&&&&&&&............
 * ...............&&&&&@  &&&&&&&&&&..&&&&&&&&&&&&&&&&&&&...........
 * ..............&&&&&&&&&&&&&&&.&&....&&&&&&&&&&&&&..&&&&&.........
 * ..........&&&&&&&&&&&&&&&&&&...&.....&&&&&&&&&&&&&...&&&&........
 * ........&&&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&....&&&.......
 * .......&&&&&&&&.....................&&&&&&&&&&&&&&&&.....&&......
 * ........&&&&&.....................&&&&&&&&&&&&&&&&&&.............
 * ..........&...................&&&&&&&&&&&&&&&&&&&&&&&............
 * ................&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&............
 * ..................&&&&&&&&&&&&&&&&&&&&&&&&&&&&..&&&&&............
 * ..............&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&....&&&&&............
 * ...........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&......&&&&............
 * .........&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&.........&&&&............
 * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&............
 * ......&&&&&&&&&&&&&&&&&&&...&&&&&&...............&&&.............
 * .....&&&&&&&&&&&&&&&&............................&&..............
 * ....&&&&&&&&&&&&&&&.................&&...........................
 * ...&&&&&&&&&&&&&&&.....................&&&&......................
 * ...&&&&&&&&&&.&&&........................&&&&&...................
 * ..&&&&&&&&&&&..&&..........................&&&&&&&...............
 * ..&&&&&&&&&&&&...&............&&&.....&&&&...&&&&&&&.............
 * ..&&&&&&&&&&&&&.................&&&.....&&&&&&&&&&&&&&...........
 * ..&&&&&&&&&&&&&&&&..............&&&&&&&&&&&&&&&&&&&&&&&&.........
 * ..&&.&&&&&&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&&&&&&&&&&&&.......
 * ...&&..&&&&&&&&&&&&.........&&&&&&&&&&&&&&&&...&&&&&&&&&&&&......
 * ....&..&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&...........&&&&&&&&.....
 * .......&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&..............&&&&&&&....
 * .......&&&&&.&&&&&&&&&&&&&&&&&&..&&&&&&&&...&..........&&&&&&....
 * ........&&&.....&&&&&&&&&&&&&.....&&&&&&&&&&...........&..&&&&...
 * .......&&&........&&&.&&&&&&&&&.....&&&&&.................&&&&...
 * .......&&&...............&&&&&&&.......&&&&&&&&............&&&...
 * ........&&...................&&&&&&.........................&&&..
 * .........&.....................&&&&........................&&....
 * ...............................&&&.......................&&......
 * ................................&&......................&&.......
 * .................................&&..............................
 * ..................................&..............................
 */

/*
 * @Author: silence
 * @Date: 2022-04-27 15:32:50
 * @LastEditors: silence
 * @LastEditTime: 2022-04-27 15:33:05
 * @Description: 加载网络图片
 */
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter/material.dart';

import '../utils/Tool/MyUtilsTools.dart';

class MyImage extends StatelessWidget {
  /// 图片地址,可以传网络图片、本地图片地址，自动判断处理
  final String? imgPath;
  final double? width;
  final double? height;
  final BoxFit? fit;
  final Widget? placeholder;

  /// 占位图，本地图片地址,没有设置placeholder时，才起作用
  final String? placeholderImgPath;

  /// 网络错误时显示，本地图片地址
  final String? errorImgPath;

  /// 背景颜色
  final Color? backgroundColor;

  /// 是否要切圆角
  final double? radius;

  /// 自定义圆角
  final BorderRadiusGeometry? borderRadius;

  /// 边框宽度
  final double? borderWidth;

  /// 边框颜色
  final Color? borderColor;

  /// 外间距
  final EdgeInsetsGeometry? margin;

  /// 对齐方式
  final AlignmentGeometry? alignment;

  const MyImage(this.imgPath,
      {Key? key,
      this.width,
      this.height,
      this.fit = BoxFit.cover,
      this.placeholder,
      this.placeholderImgPath,
      this.errorImgPath,
      this.backgroundColor,
      this.radius,
      this.borderColor,
      this.borderRadius,
      this.borderWidth,
      this.margin,
      this.alignment})
      : super(key: key);

  /// 默认色块，没有背景图时显示
  Widget get defalutWidget =>
      Container(color: Color.fromRGBO(239, 241, 243, 1));

  /// 默认占位图
  Widget get normalPlaceholder => (placeholderImgPath == null)
      ? defalutWidget
      : Image.asset(placeholderImgPath!);

  /// 错误图片
  Widget get errorWidget =>
      (errorImgPath == null) ? defalutWidget : Image.asset(errorImgPath!);

  /// 装饰
  BoxDecoration get decoration => BoxDecoration(
      color: backgroundColor,
      border: Border.all(
          color: borderColor ?? Colors.transparent, width: borderWidth ?? 0),
      borderRadius: borderRadius);

  @override
  Widget build(BuildContext context) {
    Widget contentWidget = Container();

    if (!MyUtilsTools.stringIsEmpty(imgPath)) {
      if (imgPath!.contains('https://') || imgPath!.contains('http://')) {
        // 网络图片
        contentWidget = CachedNetworkImage(
            fit: fit,
            imageUrl: imgPath!,
            placeholder: (context, str) => placeholder ?? normalPlaceholder,
            errorWidget: (context, url, error) => errorWidget);
      } else {
        // 本地图片
        contentWidget =
            Image.asset(imgPath!, width: width, height: height, fit: fit);
      }
    } else {
      // 没有地址就使用占位图
      contentWidget = normalPlaceholder;
    }

    // 是否切圆角
    if (radius != null && radius! > 0) {
      contentWidget = ClipRRect(
          child: contentWidget, borderRadius: BorderRadius.circular(radius!));
    }

    return Container(
        margin: margin,
        color: (radius != null) ? null : backgroundColor,
        width: width,
        height: height,
        decoration: decoration,
        alignment: alignment,
        child: contentWidget);
  }
}
